<?php

/**
 * 迭代器
 * 可在内部迭代自己的外部迭代器或类的接口。如使用foreach、while方式来迭代自己
 * Interface Iterator
 */
interface Iterator extends Traversable
{

    /**
     * 返回当前元素(第三个被调用)
     * @return mixed Can return any type.
     */
    public function current();

    /**
     * 向前移动到下一个元素(最后一个被调用)
     * @return void Any returned value is ignored.
     */
    public function next();

    /**
     * 返回当前元素的键(第四个被调用)
     * @return mixed scalar on success, or null on failure.
     */
    public function key();

    /**
     * 检查条件是否有效(第二个被调用)
     * @return boolean The return value will be casted to boolean and then evaluated.
     * Returns true on success or false on failure.
     */
    public function valid();

    /**
     * 返回到迭代器的第一个元素（第一个被调用）
     * foreach循环时，第一次循环时调用的第一个方法，就是好把数组指针移到第一个元素上
     * @return void Any returned value is ignored.
     */
    public function rewind();
}